When computer resources are shared, a scheduler assigns processes to one or more available processors or other resources. Typically, the scheduler assigns work, such as batch jobs, by matching job requirements with the capabilities and capacity of the resource(s). Traditionally, jobs have been assigned directly to physical resources, based on current utilization and fixed capacity. More recently, however, the physical resources are exposed through one or more resource containers (often referred to as “virtual machines”), each providing an abstraction of the underlying resources. The shared physical resources can include, for example, processing cores, storage systems, and network communication resources.
In a multi-container environment, the various containers share and compete for fixed physical resources, such as processor cycles, typically under the supervision of a container manager. The container manager typically assigns the physical resources to containers according to a set of rules or policies. The resource competition between containers adds even greater complexity to the scheduling problem. The evaluation of the resource capacity is particularly challenging in a multi-container environment.
Scheduling a job to one or more virtual containers to meet a particular service objective is also a challenge. It is particularly challenging to schedule parallel jobs to a collection of virtual containers. Parallel jobs often require uniform and concurrent execution across multiple virtual containers on physical containers. Resources exposed by virtual containers are elastic and shared with other containers, which makes it a challenge to satisfy the requirements of parallel jobs. Physical resources allocated to a virtual container change with system load and use, dynamically changing the resources consumed by presently executing jobs. This may cause the jobs to fail to meet completion time objectives.
In addition, unevenness in the execution rate of parallel tasks for a job also affect the utilization of the overall system. Some containers may have idle tasks while waiting for other tasks to catch up. Further, parallel jobs need a stable set of compute resources for long periods of time (up to months). Inappropriate scheduling assignments will have long lasting effects, unlike transactional workloads with typical execution times of sub-seconds.
A need therefore exists for improved methods and apparatus for scheduling parallel jobs in a system of virtual containers. A further need exists for techniques for scheduling a parallel job in a system of virtual containers with a controlled impact on already existing jobs.